base <- read.csv("../Bases de datos/auto-mpg.csv", stringsAsFactors = F)
Se combinan dos vectores por medio de paste
como si se hubiera hecho un ciclo.
first <- c("inicio 1 ", "inicio 2 ", "inicio 3 ", "inicio 4 ")
second <- c("primero", "segundo", "tercero", "cuarto")
paste(first, second)
## [1] "inicio 1 primero" "inicio 2 segundo" "inicio 3 tercero"
## [4] "inicio 4 cuarto"
La función paste permite combinar vectores de diferentes tamaños.
single <- c("prueba1", "prueba2")
paste(first, single)
## [1] "inicio 1 prueba1" "inicio 2 prueba2" "inicio 3 prueba1"
## [4] "inicio 4 prueba2"
No es necesario definir ciclos para aplicar operaciones elementales a las columna de un data frame.
head(base[,1:5])
## No mpg cylinders displacement horsepower
## 1 1 28 4 140 90
## 2 2 19 3 70 97
## 3 3 36 4 107 75
## 4 4 28 4 97 92
## 5 5 21 6 199 90
## 6 6 23 4 115 95
base$displacement <- base$displacement *4
head(base[,1:5])
## No mpg cylinders displacement horsepower
## 1 1 28 4 560 90
## 2 2 19 3 280 97
## 3 3 36 4 428 75
## 4 4 28 4 388 92
## 5 5 21 6 796 90
## 6 6 23 4 460 95
La idea de las funciones que pertenecen a esta familia es la manipulación de vectores, matrices, listas y data frame. Permiten evitar el uso directo de ciclos por medio de funciones que operan directamente sobre cada elemento de la estructura de datos.
Esta función es aplicable sobre matrices, su estructura es apply(x, MARGIN, FUN, ...)
y sus parámetros son los siguientes:
x
<- Es la matrizMARGIN
<- Podemos realizar operaciones sobre filas o columnas donde 1 indica filas y 2 indica columnas.FUN
<- Es la función que se quiere aplicar sobre los datos, esta puede ser una función de agregación una de transformación o subconjunto o funciones vectorizadas.m <- matrix(seq(1,16), 4, 4)
m
## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 2 6 10 14
## [3,] 3 7 11 15
## [4,] 4 8 12 16
#Máximo por columna
apply(m, 2, max)
## [1] 4 8 12 16
# Mínimo por filas
apply(m, 1, min)
## [1] 1 2 3 4
También podemos definir funciones dentro de la función apply
y aplicar estas funciones tanto por filas como por columnas (c(1,2)
)
# Cuadrado de x
apply(m, c(1,2), function(x){x^2})
## [,1] [,2] [,3] [,4]
## [1,] 1 25 81 169
## [2,] 4 36 100 196
## [3,] 9 49 121 225
## [4,] 16 64 144 256
Si queremos aplicar funciones que dependen de ciertos parámetros lo hacemos de la siguiente manera.
# Aplicando la función quantile
apply(m, 1, quantile,probs = c(0.4,0.6,0.8))
## [,1] [,2] [,3] [,4]
## 40% 5.8 6.8 7.8 8.8
## 60% 8.2 9.2 10.2 11.2
## 80% 10.6 11.6 12.6 13.6
Esta función permite trabajar con vectores, listas o data frame. Se pueden aplicar operaciones por elementos las cuales con retornadas como una lista. Su estructura está dada por lapply(x, simplify=FALSE, FUN,...)
.
simplify=FALSE
<- Le indica a R que no retorne los valores como una lista.x <- 1:3
lapply(x, sqrt)
## [[1]]
## [1] 1
##
## [[2]]
## [1] 1.414214
##
## [[3]]
## [1] 1.732051
x <- list(a = 1:10, b = c(1,10,100,1000), c = seq(5,50,5))
x
## $a
## [1] 1 2 3 4 5 6 7 8 9 10
##
## $b
## [1] 1 10 100 1000
##
## $c
## [1] 5 10 15 20 25 30 35 40 45 50
lapply(x, mean)
## $a
## [1] 5.5
##
## $b
## [1] 277.75
##
## $c
## [1] 27.5
Esta función tiene un uso similar a la función lapply()
ya que puede ser usada para data frame, vectores y listas pero se diferencia ya que esta imprime por consola un vector de valores y no una lista. La estructura está dada por sapply(x, FUN, ...)
sapply(x, mean)
## a b c
## 5.50 277.75 27.50
sapply(base[,2:8], summary)
## mpg cylinders displacement horsepower weight acceleration
## Min. 9.00000 3.000000 272.0000 46.0000 1613.000 8.00000
## 1st Qu. 17.50000 4.000000 417.0000 76.0000 2223.750 13.82500
## Median 23.00000 4.000000 594.0000 92.0000 2803.500 15.50000
## Mean 23.51457 5.454774 773.7035 104.1281 2970.425 15.56809
## 3rd Qu. 29.00000 8.000000 1048.0000 125.0000 3608.000 17.17500
## Max. 46.60000 8.000000 1820.0000 230.0000 5140.000 24.80000
## model_year
## Min. 70.00000
## 1st Qu. 73.00000
## Median 76.00000
## Mean 76.01005
## 3rd Qu. 79.00000
## Max. 82.00000
apply(base[,2:8], 2,sum)
## mpg cylinders displacement horsepower weight
## 9358.8 2171.0 307934.0 41443.0 1182229.0
## acceleration model_year
## 6196.1 30252.0
Esta función permite aplicar funciones a subconjuntos de datos de un data data frame o vectores. Su estructura esta dado por tapply(X, INDEX, FUN , ..., simplify = TRUE)
.
INDEX
<- Es una lista de las categorías.base$cylinders <- factor(base$cylinders,
levels = c(3,4,5,6,8),
labels = c("3C", "4C", "5C", "6C", "8C"))
#Función con respecto a cada nivel del número de cilindros
tapply(base$mpg, base$cylinders, mean)
## 3C 4C 5C 6C 8C
## 20.55000 29.28676 27.36667 19.98571 14.96311
tapply(base$mpg, list(cyl = base$cylinders), mean)
## cyl
## 3C 4C 5C 6C 8C
## 20.55000 29.28676 27.36667 19.98571 14.96311
Esta función permite aplicar funciones definidas por el usuario a cualquier subconjunto de la base de datos. Su estructura es by(data, INDICES, FUN, ..., simplify = TRUE)
.
by(base, base$cylinders, function(row){cor(row$mpg, row$acceleration)})
## base$cylinders: 3C
## [1] -0.8188727
## --------------------------------------------------------
## base$cylinders: 4C
## [1] 0.07488465
## --------------------------------------------------------
## base$cylinders: 5C
## [1] 0.714897
## --------------------------------------------------------
## base$cylinders: 6C
## [1] -0.339605
## --------------------------------------------------------
## base$cylinders: 8C
## [1] 0.3212278